(Qt)正确清晰的显示SVG图案到Label中显示以及Painter画清晰的SVG

您所在的位置:网站首页 qt border image (Qt)正确清晰的显示SVG图案到Label中显示以及Painter画清晰的SVG

(Qt)正确清晰的显示SVG图案到Label中显示以及Painter画清晰的SVG

#(Qt)正确清晰的显示SVG图案到Label中显示以及Painter画清晰的SVG| 来源: 网络整理| 查看: 265

首先,客户端的适配免不了处理DPI的一系列问题,Qt-Dpi的适配方案研究可以参考我的另外一篇博文(在项目中我的DPI处理方案,链接之后发)。Dpi的不同会导致普通格式的贴图会模糊,而SVG的出现可以更好的解决这个问题,Qt对SVG的解析和支持主要使用了QSvgRenderer这个类。

目前使用SVG有三个方法:

1.样式表设置image:url(xxx.svg),这里不要用border-image和background-image。

2.将SVG加工成Pixmap,贴到Label上去

3.在Painter中画SVG加工好的Pixmap

第一种方法在dpi改变的情况下能自动适配,而2.3两种方法只能一次性画好,下面重点说下2.3两种方法:

第二种方法:在QLabel上画SVG

代码如下列所示,其中容器大小为所需要svg呈现的大小,而且必须乘以DPI的系数。

        QString svg_path = QSvgRenderer svg_remder (folder_icon_path);QSize label_size = ui->label->size(); //取控件的大小即可QImage image(QSize(label_size .width()* g_fGlobalDPI, label_size .height()* g_fGlobalDPI), QImage::Format_ARGB32_Premultiplied); 输出的img一定要是拉伸dpi倍数之后尺寸img.fill(Qt::transparent);QPainter painter(&image);painter.setRenderHints(QPainter::Antialiasing|QPainter::TextAntialiasing| QPainter::SmoothPixmapTransform);svg_remder.render(&painter);QPixmap pix;pix=pix.fromImage(image);pix.setDevicePixelRatio(g_fGlobalDPI);//设置pixmap伸缩比例

第三种方法:在Painter中画SVG

其实和上面类似,都是得到相应的合理的pixmap,之后直接用painer绘画即可。最后利用这个pixmap在对应控件的painter->drawpixmap()即可。

        QString svg_path = QSvgRenderer svg_remder (folder_icon_path);QSize label_size = ui->label->size(); //取控件的大小即可QImage image(QSize(label_size .width()* g_fGlobalDPI, label_size .height()* g_fGlobalDPI), QImage::Format_ARGB32_Premultiplied); 输出的img一定要是拉伸dpi倍数之后尺寸img.fill(Qt::transparent);QPainter painter(&image);painter.setRenderHints(QPainter::Antialiasing|QPainter::TextAntialiasing| QPainter::SmoothPixmapTransform);svg_remder.render(&painter);QPixmap pix;pix=pix.fromImage(image);pix.setDevicePixelRatio(g_fGlobalDPI);//设置pixmap伸缩比例



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3